
The subscription methods also allow you to directly specify the callback method (delegate) to be invoked for each event notification you are subscribing to.
For detailed discussion on this subject, please refer to “Using Callback Methods Instead of Event Handlers” under the “OPC Data Access Tasks” chapter. All information presented there applies to OPC Alarms and Events as well.
// This example shows how to subscribe to events and display the event message with each notification, using a callback method
// specified using lambda expression.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.
using System;
using System.Diagnostics;
using System.Threading;
using OpcLabs.EasyOpc.AlarmsAndEvents;
namespace DocExamples.AlarmsAndEvents._EasyAEClient
{
partial class SubscribeEvents
{
public static void CallbackLambda()
{
// Instantiate the client object.
var client = new EasyAEClient();
Console.WriteLine("Subscribing...");
// The callback is a lambda expression the displays the event message
client.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000,
(sender, eventArgs) =>
{
Debug.Assert(eventArgs != null);
if (!eventArgs.Succeeded)
{
Console.WriteLine("*** Failure: {0}", eventArgs.ErrorMessageBrief);
return;
}
if (!(eventArgs.EventData is null))
Console.WriteLine(eventArgs.EventData.Message);
});
Console.WriteLine("Processing event notifications for 20 seconds...");
Thread.Sleep(20 * 1000);
Console.WriteLine("Unsubscribing...");
client.UnsubscribeAllEvents();
Console.WriteLine("Waiting for 2 seconds...");
Thread.Sleep(2 * 1000);
}
}
}
' This example shows how to subscribe to events and display the event message with each notification, using a callback method
' specified using lambda expression.
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET .
' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
' a commercial license in order to use Online Forums, and we reply to every post.
Imports OpcLabs.EasyOpc.AlarmsAndEvents
Namespace AlarmsAndEvents._EasyAEClient
Partial Friend Class SubscribeEvents
Public Shared Sub CallbackLambda()
' Instantiate the client object
Dim client = New EasyAEClient()
Console.WriteLine("Subscribing...")
' The callback is a lambda expression the displays the event message
client.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000,
Sub(sender, eventArgs)
Debug.Assert(eventArgs IsNot Nothing)
If Not eventArgs.Succeeded Then
Console.WriteLine("*** Failure: {0}", eventArgs.ErrorMessageBrief)
Exit Sub
End If
If eventArgs.EventData IsNot Nothing Then
Console.WriteLine(eventArgs.EventData.Message)
End If
End Sub)
Console.WriteLine("Processing event notifications for 20 seconds...")
Threading.Thread.Sleep(20 * 1000)
Console.WriteLine("Unsubscribing...")
client.UnsubscribeAllEvents()
Console.WriteLine("Waiting for 2 seconds...")
Threading.Thread.Sleep(2 * 1000)
End Sub
End Class
End Namespace
Python
# This example shows how to subscribe to events and display the event message with each notification, using a regular
# callback method.
#
# Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
# OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python .
# Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
# a commercial license in order to use Online Forums, and we reply to every post.
# The QuickOPC package is needed. Install it using "pip install opclabs_quickopc".
import opclabs_quickopc
import time
# Import .NET namespaces.
from OpcLabs.EasyOpc import *
from OpcLabs.EasyOpc.AlarmsAndEvents import *
# Notification callback.
def callback(sender, e):
assert e is not None
if not e.Succeeded:
print('*** Failure: ', e.ErrorMessageBrief, sep='')
return
else:
if e.EventData is not None:
print(e.EventData.Message)
# Instantiate the client object
client = EasyAEClient()
print('Subscribing events...')
# The callback is a regular method that displays the event message.
handle = IEasyAEClientExtension.SubscribeEvents(client,
'', 'OPCLabs.KitEventServer.2', 1000,
EasyAENotificationEventHandler(callback))
print('Processing event notifications for 20 seconds...')
time.sleep(20)
print('Unsubscribing events...')
client.UnsubscribeAllEvents()
print('Waiting for 2 seconds...')
time.sleep(2)
print('Finished.')
See Also